A Veces es necesario utilizar variables categóricas en métodos analı́ticos que solo permiten el ingreso de variables numéricas,por lo que a veces es necesario crear variables indicadoras. Con el paquete dummies podemos hacer estas conversiones.
library(dummies)
## Warning: package 'dummies' was built under R version 3.5.2
library(kableExtra)
base <- read.csv("../bases de datos/data-conversion.csv")
kable(head(base),format = "markdown")
Age | State | Gender | Height | Income |
---|---|---|---|---|
23 | NJ | F | 61 | 5000 |
13 | NY | M | 55 | 1000 |
36 | NJ | M | 66 | 3000 |
31 | VA | F | 64 | 4000 |
58 | NY | F | 70 | 30000 |
29 | TX | F | 63 | 10000 |
base.dummy <- dummy.data.frame(base)
kable(head(base.dummy),format = "markdown")
Age | StateNJ | StateNY | StateTX | StateVA | GenderF | GenderM | Height | Income |
---|---|---|---|---|---|---|---|---|
23 | 1 | 0 | 0 | 0 | 1 | 0 | 61 | 5000 |
13 | 0 | 1 | 0 | 0 | 0 | 1 | 55 | 1000 |
36 | 1 | 0 | 0 | 0 | 0 | 1 | 66 | 3000 |
31 | 0 | 0 | 0 | 1 | 1 | 0 | 64 | 4000 |
58 | 0 | 1 | 0 | 0 | 1 | 0 | 70 | 30000 |
29 | 0 | 0 | 1 | 0 | 1 | 0 | 63 | 10000 |
base.dummy <- dummy.data.frame(base, names = "Gender")
kable(head(base.dummy),format = "markdown")
Age | State | GenderF | GenderM | Height | Income |
---|---|---|---|---|---|
23 | NJ | 1 | 0 | 61 | 5000 |
13 | NY | 0 | 1 | 55 | 1000 |
36 | NJ | 0 | 1 | 66 | 3000 |
31 | VA | 1 | 0 | 64 | 4000 |
58 | NY | 1 | 0 | 70 | 30000 |
29 | TX | 1 | 0 | 63 | 10000 |
Para entender la necesidad de escalar variables analizaremos la siguiente base de datos
kable(head(base)) %>% column_spec(5,background = "pink") %>% row_spec(c(2,5),background = "yellow") %>% kable_styling(full_width = T)
Age | State | Gender | Height | Income |
---|---|---|---|---|
23 | NJ | F | 61 | 5000 |
13 | NY | M | 55 | 1000 |
36 | NJ | M | 66 | 3000 |
31 | VA | F | 64 | 4000 |
58 | NY | F | 70 | 30000 |
29 | TX | F | 63 | 10000 |
Se puede observar que aunque las cuadrículas pintadas en amarillo pertenecen a la misma variable (Income) la diferencia en valor numérico es bastante grande, lo que puede dificultar la implementación de técnicas de Machine Learning. En R cuando queremos escalar las variables hacemos los siguientes procedimientos.
library(scales)
#Ahora reescalamos un variable de la base de datos
kable(rescale(base$Income))
x |
---|
0.0740741 |
0.0000000 |
0.0370370 |
0.0555556 |
0.5370370 |
0.1666667 |
0.9074074 |
1.0000000 |
0.0185185 |
0.3518519 |
Por defecto la función rescale me realiza un escalado de la variables en un rango [0,1] ya que aplica el siguiente método para escalar
\[x.escalada = \frac{x-min(x)}{max(x)-min(x)}\]
Si queremos modificar la escala modelos hacer lo siguiente
kable(rescale(base$Income,to=c(1,10)))
x |
---|
1.666667 |
1.000000 |
1.333333 |
1.500000 |
5.833333 |
2.500000 |
9.166667 |
10.000000 |
1.166667 |
4.166667 |
la normalización significa ajustar los valores medidos en diferentes escalas respecto a una escala común, a menudo previo a un proceso de realizar promedios. En R se pueden escalar las variables de una base de datos por medio de el siguiente procedimiento.
base.escalada<- scale(base[,c(4,5)],center=T,scale=T)
kable(head(base.escalada),format = "markdown")
Height | Income |
---|---|
-0.7218398 | -0.6377182 |
-2.0342757 | -0.8339392 |
0.3718568 | -0.7358287 |
-0.0656218 | -0.6867734 |
1.2468141 | 0.5886629 |
-0.2843611 | -0.3924420 |